package com.jt.redis;

import jdk.nashorn.internal.parser.Token;
import redis.clients.jedis.Jedis;

import javax.sound.midi.Soundbank;
import java.util.Map;
import java.util.UUID;

/**
 * SSO——单点登录系统 案例演示：
 * 1）访问资源（假如没有登录，要提示先登录，如何判定是否登录了 ）
 * 2）执行登录（登录成功，要将登录用户信息写入到Redis）
 * 3）访问资源（登录ok 从Redis获取token值信息）
 */
public class SSODome01 {
    /**
     * 认证中心的登录设计
     */
    static String  doLogin(String username ,String password){
       //1、执行用户身份合法性
        if (!"jack".equals(username))
            throw new IllegalArgumentException("这个用户不存在");
        if (!"123456".equals(password))
            throw new IllegalArgumentException("密码不正确");
       //2、用户存在并密码正确，表示用户合法
       //3、将合法用户信息存储到Redis
        Jedis jedis = new Jedis("192.168.126.129",6379);
        String token =  UUID.randomUUID().toString();
        jedis.set(token,username);
        jedis.expire(token, 2);
        jedis.close();
        return token;
    }

    /**
     * 获取资源服务中的资源
     */
    static Object doGetResource(String token){

       //1、检查用户是否已经登录
        if (token==null||"".equals(token)){
            throw new IllegalArgumentException("请先登录");
        }
        Jedis jedis = new Jedis("192.168.126.129",6379);
        String username = jedis.get(token);
        //2、假如没有登录，则提示先登录
        if (username==null)
            throw new RuntimeException("token过期了，请重新登录");
       //3、已经登录则可以访问资源
        System.out.println("继续访问资源");
        return "the resource of user";
    }
    //main方法相当于客户端
    public static void main(String[] args) throws InterruptedException {
        String token = null;
        //第一次访问资源
        //doGetResource(token);
        //执行登录操作
        token = doLogin("jack", "123456");
        //第二次访问资源
        Thread.sleep(2000);
        doGetResource(token);
    }
}
